package com.disapand.strongarmy.service

import com.disapand.strongarmy.model.*
import com.disapand.strongarmy.vo.*
import com.disapand.strongarmy.vo.account.*
import java.time.*

/**
 *
 * @auth disapand
 * @date 2021/10/12 - 21:52 - 星期二
 *
 */
interface AccountService {

    /**
     * 添加新用户
     *
     * @param account
     * @param password
     * @param username
     * @param avatar
     * @return
     */
    fun add(account: String, password: String, username: String, avatar: String): Boolean

    /**
     * 根据 id 查找账号
     *
     * @param id
     * @return
     */
    fun get(id: Int): Account?

    /**
     * 根据 account 查找账号
     *
     * @param account
     * @return
     */
    fun get(account: String): Account?

    /**
     * 获取账号密码
     *
     * @param account
     * @return
     */
    fun getByPassword(account: String): Account?

    /**
     * 分页返回账号列表
     *
     * @param account
     * @param username
     * @param status
     * @param createdBy
     * @param createdAt
     * @param createdStartAt
     * @param createdEndAt
     * @param updatedBy
     * @param updatedAt
     * @param updatedStartAt
     * @param updatedEndAt
     * @param current
     * @param pageSize
     * @return
     */
    fun list(
        account: String?,
        username: String?,
        status: IntArray?,
        createdBy: Int?,
        createdAt: String?,
        createdStartAt: LocalDateTime?,
        createdEndAt: LocalDateTime?,
        updatedBy: Int?,
        updatedAt: String?,
        updatedStartAt: LocalDateTime?,
        updatedEndAt: LocalDateTime?,
        current: Int,
        pageSize: Int
    ): PageVO<AccountPageVO>

    /**
     * 获取所有的账号
     *
     * @return
     */
    fun list(): List<Account>

    /**
     * 禁用账号
     *
     * @param id
     * @return
     */
    fun disabled(id: Int): Boolean

    /**
     * 启用账号
     *
     * @param id
     * @return
     */
    fun enabled(id: Int): Boolean

    /**
     * 删除账号
     *
     * @param id
     * @return
     */
    fun deleted(id: Int): Boolean

    /**
     * 恢复账号
     *
     * @param id
     * @return
     */
    fun restore(id: Int): Boolean

    /**
     * 获取账号的所有角色
     *
     * @param id
     * @return
     */
    fun getRoles(id: Int): List<Role>

    /**
     * 更新账号的角色
     *
     * @param id
     * @param roles
     * @return
     */
    fun updateRoles(id: Int, roles: List<Int>)

    /**
     * 获取账号的所有菜单
     *
     * @param id
     * @return
     */
    fun getMenus(id: Int): Set<Menu>

    /**
     * 获取账号的所有权限
     *
     * @param id
     * @return
     */
    fun getPermissions(id: Int): Set<Permission>
}